package com.somiz.utilisateur;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;

import org.hibernate.Session;

import com.gest.util.FileDirectoryUtil;
import com.gest.util.FilterComboBox;
import com.gest.util.ImagePanel;
import com.somiz.main.Control;
import com.somiz.structure.Structure;
import com.tech.hibernate.HibernateUtil;

public class UtilisateurForm extends JPanel {
	private JTextField T_nom;
	private JTextField T_lienImage;
	private JTextField T_matricule;
	private FilterComboBox C_strct;
	private JTextField T_tel;
	private JTextField T_msg;
	private ImagePanel imagePanel;
	private static Long UtilisateurId;
	private static String nomImage;

	/**
	 * Create the panel.
	 */
	public UtilisateurForm() {
		Session session = HibernateUtil.getSessionFactory().openSession();
		C_strct = ListeCombStructure(session, C_strct);
		session.close();
		setLayout(null);

		JButton button = new JButton("");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Session session = HibernateUtil.getSessionFactory()
						.openSession();
				vider(session);
				session.close();

			}
		});
		button.setIcon(new ImageIcon(UtilisateurForm.class
				.getResource("/cc/black/png/delete_icon&32.png")));
		button.setPreferredSize(new Dimension(50, 50));
		button.setMnemonic(KeyEvent.VK_ENTER);
		button.setBackground(Color.WHITE);
		button.setBounds(70, 11, 50, 50);
		add(button);

		JButton button_1 = new JButton("");
		button_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Session session = HibernateUtil.getSessionFactory()
						.openSession();
				if (errForm(session).equals("")) {
					if (UtilisateurId == null) {
						// creer
						Utilisateur utilisateur = new Utilisateur();
						utilisateur = FormVersUtilisateur(utilisateur, session);
						if (Control.getUtilisateurDao()
								.isExisteAvecNomEtPrenom(utilisateur, session)) {
							JOptionPane
									.showMessageDialog(
											null,
											"cet utilisateur existe deja dans votre base do donnees",
											"Erreur",
											JOptionPane.WARNING_MESSAGE);
						} else {
							Control.getUtilisateurDao().Creer(utilisateur,
									session);
							UtilisateurId = utilisateur.getId();
						}
					} else {
						// modif
						Utilisateur utilisateur = new Utilisateur();
						utilisateur = FormVersUtilisateur(utilisateur, session);

						if (Control.getUtilisateurDao()
								.isExisteAvecNomEtPrenom(utilisateur, session)) {
							if (UtilisateurId.equals(Control
									.getUtilisateurDao()
									.TrouverAvecNom(utilisateur, session)
									.getId())) {
								utilisateur = Control.getUtilisateurDao()
										.TrouverAvecId(UtilisateurId,
												utilisateur, session);
								utilisateur = FormVersUtilisateur(utilisateur,
										session);
								Control.getUtilisateurDao().modifier(
										utilisateur, session);
							} else {
								JOptionPane
										.showMessageDialog(
												null,
												"cet utilisateur existe deja dans votre base de donnees",
												"Erreur",
												JOptionPane.WARNING_MESSAGE);
							}

						} else {
							utilisateur = Control.getUtilisateurDao()
									.TrouverAvecId(UtilisateurId, utilisateur,
											session);
							utilisateur = FormVersUtilisateur(utilisateur,
									session);
							Control.getUtilisateurDao().modifier(utilisateur,
									session);
						}
					}
				} else {
					JOptionPane.showMessageDialog(null, errForm(session),
							"Erreur", JOptionPane.WARNING_MESSAGE);
				}
				session.close();
			}
		});
		button_1.setIcon(new ImageIcon(UtilisateurForm.class
				.getResource("/cc/black/png/save_icon&32.png")));
		button_1.setPreferredSize(new Dimension(50, 50));
		button_1.setMnemonic(KeyEvent.VK_ENTER);
		button_1.setBackground(Color.WHITE);
		button_1.setBounds(10, 11, 50, 50);
		add(button_1);

		JSeparator separator = new JSeparator();
		separator.setBounds(10, 81, 650, 2);
		add(separator);

		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBorder(new TitledBorder(UIManager
				.getBorder("TitledBorder.border"), "Marque :",
				TitledBorder.LEADING, TitledBorder.TOP, null, null));
		panel.setBounds(10, 101, 393, 264);
		add(panel);

		JLabel lblNomEtPrenom = new JLabel("Nom et prenom:");
		lblNomEtPrenom.setBounds(29, 26, 124, 28);
		panel.add(lblNomEtPrenom);

		T_nom = new JTextField();
		T_nom.setColumns(10);
		T_nom.setBounds(163, 23, 220, 34);
		panel.add(T_nom);

		T_matricule = new JTextField();
		T_matricule.setColumns(10);
		T_matricule.setBounds(163, 65, 220, 34);
		panel.add(T_matricule);

		JLabel lblMatricule = new JLabel("Matricule :");
		lblMatricule.setBounds(29, 68, 124, 28);
		panel.add(lblMatricule);

		C_strct.setBounds(163, 110, 220, 34);
		panel.add(C_strct);

		JLabel lblStructure = new JLabel("Structure :");
		lblStructure.setBounds(29, 113, 124, 28);
		panel.add(lblStructure);

		T_tel = new JTextField();
		T_tel.setColumns(10);
		T_tel.setBounds(163, 155, 220, 34);
		panel.add(T_tel);

		JLabel lblTelChffires = new JLabel("Tel(4 chffires) :");
		lblTelChffires.setBounds(29, 158, 124, 28);
		panel.add(lblTelChffires);

		T_msg = new JTextField();
		T_msg.setColumns(10);
		T_msg.setBounds(163, 200, 220, 34);
		panel.add(T_msg);

		JLabel lblMessagerie = new JLabel("messagerie :");
		lblMessagerie.setBounds(29, 203, 124, 28);
		panel.add(lblMessagerie);

		JPanel panel_1 = new JPanel();
		panel_1.setLayout(null);
		panel_1.setBorder(new LineBorder(new Color(0, 0, 0)));
		panel_1.setBounds(438, 123, 221, 225);
		add(panel_1);

		imagePanel = new ImagePanel();
		imagePanel.setBorder(new LineBorder(new Color(0, 0, 0)));
		imagePanel.setBackground(Color.WHITE);
		imagePanel.setBounds(36, 11, 149, 154);
		panel_1.add(imagePanel);

		T_lienImage = new JTextField();
		T_lienImage.setColumns(10);
		T_lienImage.setBounds(10, 176, 165, 28);
		panel_1.add(T_lienImage);

		JButton button_2 = new JButton("");
		button_2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JFileChooser chooser = new JFileChooser();
				int retour = chooser.showOpenDialog(Control.getPrincipal());
				if (retour == JFileChooser.APPROVE_OPTION) {
					T_lienImage.setText(chooser.getSelectedFile()
							.getAbsolutePath());
					nomImage = chooser.getSelectedFile().getName();
					imagePanel.loadImage(chooser.getSelectedFile()
							.getAbsolutePath());
				}
			}
		});
		button_2.setIcon(new ImageIcon(UtilisateurForm.class
				.getResource("/cc/black/png/zoom_icon&16.png")));
		button_2.setPreferredSize(new Dimension(50, 50));
		button_2.setMnemonic(KeyEvent.VK_ENTER);
		button_2.setBackground(Color.WHITE);
		button_2.setBounds(185, 176, 26, 28);
		panel_1.add(button_2);

		JButton button_3 = new JButton("");
		button_3.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Session session = HibernateUtil.getSessionFactory()
						.openSession();
				vider(session);
				session.close();
			}
		});
		button_3.setIcon(new ImageIcon(UtilisateurForm.class
				.getResource("/images/png/Add32.png")));
		button_3.setPreferredSize(new Dimension(50, 50));
		button_3.setMnemonic(KeyEvent.VK_ENTER);
		button_3.setBackground(Color.WHITE);
		button_3.setBounds(130, 11, 50, 50);
		add(button_3);

	}

	public FilterComboBox ListeCombStructure(Session session,
			FilterComboBox comboBox) {
		Structure structure = new Structure();
		List<Structure> structures = Control.getStructureDao().charger(
				structure, session);
		List<String> listeRet = new ArrayList<String>();
		listeRet.add("");
		if (structures != null) {
			for (int i = 0; i < structures.size(); i++) {
				listeRet.add(structures.get(i).getCode());
			}
		}
		comboBox = new FilterComboBox(listeRet);
		return comboBox;
	}

	public void UtilisateurVersForm(Utilisateur utilisateur) {
		T_nom.setText(utilisateur.getNomPrenom());
		T_lienImage.setText(utilisateur.getLienImage());
		if (utilisateur.getLienImage() != null)
			imagePanel.loadImage(utilisateur.getLienImage());
		T_matricule.setText(utilisateur.getMatricule());
		T_msg.setText(utilisateur.getMsg());
		T_tel.setText(utilisateur.getTel());
		C_strct.setSelectedItem(utilisateur.getStructure().getCode());
	}

	public Utilisateur FormVersUtilisateur(Utilisateur utilisateur,
			Session session) {
		utilisateur.setNomPrenom(T_nom.getText());
		utilisateur.setMatricule(T_matricule.getText());
		utilisateur.setMsg(T_msg.getText());
		utilisateur.setTel(T_tel.getText());

		Structure structure = new Structure();
		structure.setCode(C_strct.getSelectedItem().toString());
		utilisateur.setStructure(Control.getStructureDao().TrouverAvecCode(
				structure, session));

		if (!T_lienImage.getText().toString()
				.equals("images/imageDefaut/default.png")) {
			utilisateur.setLienImage(T_lienImage.getText());
			utilisateur.setLienImage("images/imageUtilisateurs/" + nomImage);
			FileDirectoryUtil.copyFile(T_lienImage.getText(),
					"images/imageUtilisateurs/" + nomImage);
		} else {
			utilisateur.setLienImage(T_lienImage.getText());
		}
		return utilisateur;
	}

	public String errForm(Session session) {
		String err = "";
		if (T_nom.getText().equals("")) {
			err = err + "- il faut donner un nom pour l'utilisateur\n";
		}
		if (C_strct.getSelectedItem().equals("")) {
			err = err + "- il faut assigner l'utilisateur a une structure\n";
		}
		Structure structure = new Structure();
		structure.setCode(C_strct.getSelectedItem().toString());
		if (Control.getStructureDao().isExisteAvecCode(structure, session))
			;
		return err;
	}

	public void vider(Session session) {
		C_strct.RemplireComboListe(Control.getStructureDao()
				.ListeCodesStructures(session));
		T_lienImage.setText("images/imageDefaut/default.png");
		imagePanel.loadImage("images/imageDefaut/default.png");
		T_matricule.setText("");
		T_msg.setText("");
		T_nom.setText("");
		T_tel.setText("");
		UtilisateurId = null;
	}

	public static final Long getUtilisateurId() {
		return UtilisateurId;
	}

	public static final void setUtilisateurId(Long utilisateurId) {
		UtilisateurId = utilisateurId;
	}

}
